import { defineStore } from 'pinia'
import { ref, computed } from 'vue'

export const useAccountStore = defineStore(
    'account',
    () => {
        /* ---------------------- 状态 ---------------------- */
        const adminInfo = ref(null)   // 管理员信息（未登录时为 null）
        const userInfo = ref(null)   // 普通用户信息（未登录时为 null）

        /* ---------------------- 计算属性 ---------------------- */
        // 当前登录角色：优先 admin，其次 user，均为空则返回 null
        const currentRole = computed(() => {
            if (adminInfo.value) return 'admin'
            if (userInfo.value) return 'user'
            return null
        })

        // 当前有效信息：根据 currentRole 自动返回 adminInfo 或 userInfo
        const currentInfo = computed(() => {
            return currentRole.value === 'admin' ? adminInfo.value : userInfo.value
        })

        /* ---------------------- 方法 ---------------------- */
        // ① 登录成功 → 保存管理员信息，顺便清掉 userInfo
        function setAdminInfo(info) {
            adminInfo.value = info
            userInfo.value = null
        }

        // ② 登录成功 → 保存普通用户信息，顺便清掉 adminInfo
        function setUserInfo(info) {
            userInfo.value = info
            adminInfo.value = null
        }

        // ③ 退出登录 → 两种身份一起清空
        function clearAll() {
            adminInfo.value = null
            userInfo.value = null
        }

        return {
            // state
            adminInfo,
            userInfo,

            // getters
            currentRole,
            currentInfo,

            // actions
            setAdminInfo,
            setUserInfo,
            clearAll,
        }
    },
    {
        // 持久化到 localStorage；如需 sessionStorage 改 storage: sessionStorage
        persist: true,
    },
)
